Neural network atau artificial neural network (ANN) adalah metode machine learning yang terinspirasi dari cara kerja otak manusia. Otak bekerja dengan suatu sistem saraf (biological neural network). Terdapat 2 hal utama dari sistem saraf manusia yang diadopsi oleh neural network: arsitektur & proses belajar yang dilakukan.
Beberapa aplikasi Deep Learning:
Image Filter
The Machine Behind Instagram Filter
Detect Defect in Product Using Image Recognition
< a href = “https://rpubs.com/Argaadya/semiconductor” > Detect Defect Using Sensor Information
Deep Learning for Self Driving Cars
Deep Learning in Self-Driving Cars
The New Star of AI : GPT-3
GPT-3 adalah model Neural Network yang dilatih dengan menggunakan data banyak teks bahasa inggris yang diambil dari internet. GPT-3 dikembangkan oleh OpenAI, salah satu perusahaan yang didirkan oleh Elon Musk.
Demo:
Kita refresh kembali materi awal tentang model regresi, baik regresi linear dan regresi logistik agar nantinya lebih familiar perbedaannya dengan arsitektur neural network. 🤔✨
Misalkan kita punya data untuk memprediksi harga rumah dengan variabel seperti berikut:
#> 'data.frame': 100 obs. of 4 variables:
#> $ age : num 35.9 13.3 1.8 35.5 9.1 6.4 25.9 3.1 0 12.3 ...
#> $ distance_to_mrt: num 641 562 1456 641 1402 ...
#> $ num_conv_store : int 3 5 1 3 0 9 0 5 9 1 ...
#> $ price : num 61.5 54.8 27 40.8 43.2 62.2 22.1 56.2 50.8 29.5 ...
🔍 Data Description:
age : usia rumahdistance_to_mrt : jarak ke stasiun MRT
terdekatnum_conv_store : jumlah toko kelontong
di lingkungan sekitarprice : kisaran harga rumahSekarang, kita buat model regresi linear untuk memprediksi harga rumah.
#>
#> Call:
#> lm(formula = price ~ ., data = df_linear)
#>
#> Coefficients:
#> (Intercept) age distance_to_mrt num_conv_store
#> 45.759308 -0.346455 -0.005375 1.240674
Persamaan regresi linear yang dihasilkan:
\[price = 45.75 - 0.34\ age - 0.01\ distance\ to\ MRT + 1.24\ convenience\ store\]
Pada regresi linear, nilai target (Y) dihitung sebagai penjumlahan bobot (koefisien) dikalikan nilai variabel. Formula matematisnya:
\[\hat y = W_0 + \Sigma_{i=1}^m{x_i\ W_i}\] ### 📉 Ilustrasi
Grafik berikut menunjukkan bagaimana prediktor memengaruhi price. 🔢
Sekarang kita coba masalah klasifikasi. Kali ini, kita ubah variabel
target (price) menjadi kategori: low dan
high.
#> 'data.frame': 100 obs. of 4 variables:
#> $ age : num 7.1 8.5 11.8 6.4 13.2 9.1 0 2.6 16.9 38.2 ...
#> $ distance_to_mrt: num 451.2 104.8 533.5 90.5 150.9 ...
#> $ num_conv_store : int 5 5 4 9 7 0 1 4 0 2 ...
#> $ price : int 1 1 1 1 1 1 1 1 0 0 ...
🔍 Data Description:
age : usia rumahdistance_to_mrt : jarak ke stasiun MRT
terdekatnum_conv_store : jumlah toko kelontong
di lingkungan sekitarprice : kategori harga rumah
Sekarang, mari kita buat model regresi logistik:
# Membuat model regresi logistik
model_logit <- glm(price ~ ., data = df_kategori, family = "binomial")
model_logit#>
#> Call: glm(formula = price ~ ., family = "binomial", data = df_kategori)
#>
#> Coefficients:
#> (Intercept) age distance_to_mrt num_conv_store
#> 5.103873 -0.093332 -0.003873 0.004009
#>
#> Degrees of Freedom: 99 Total (i.e. Null); 96 Residual
#> Null Deviance: 138
#> Residual Deviance: 61.09 AIC: 69.09
Pada regresi logistik, nilai log of odds dihitung dengan formula berikut:
\[g(x) = 5.10 - 0.09\ age - 0.004\ distance\ to\ MRT + 0.004\ num\ convenience\ store\]
👉 Selanjutnya, hasil ini diubah menjadi probabilitas (range 0-1) menggunakan fungsi sigmoid:
\[P(price) = \frac{1}{1 + e^{-g(x)}}\]
Grafik berikut menunjukkan perbedaan utama antara regresi linear dan logistik:
Apa kesamaan model regresi logistik dan regresi linear dari segi pemrosesan datanya? 🤔
Dalam mempelajari pola data, regresi akan menghasilkan persamaan regresi berdasarkan coefficient ___________________________________
🌼Quick Summary : 🌼
✨Recall Linear Regression & Logistic Regression ✨
Linear Regresi :
Logistic Regression :
Jaringan saraf buatan terinspirasi oleh sistem saraf manusia! Sistem saraf ini terdiri dari banyak neuron, yang bekerja bersama membentuk jaringan. Tiap stimulus (seperti suara, sentuhan, atau cahaya) diterima oleh panca indra, diproses di otak, lalu menghasilkan respon.
Sama seperti tubuh manusia yang memproses stimulus menjadi respon, neural network juga memproses input menjadi output. 🚀
Arsitektur ini menginspirasi pengembangan model neural network. Berikut adalah visualisasi bagaimana informasi dialirkan melalui jaringan ini:
Model neural network terdiri dari lapisan-lapisan yang bekerja seperti sistem saraf:
Input Layer 🌟
Hidden Layer 🔍
Output Layer 🎯
Setiap layer terdiri dari node/neuron yang saling terhubung melalui weight/bobot, dan beberapa layer memiliki bias untuk membantu pergeseran fungsi aktivasi.
Berikut adalah contoh arsitektur neural network untuk kasus klasifikasi harga rumah:
Mari kita buat model Neural Network untuk memprediksi harga rumah
berdasarkan data price. Kita akan menggunakan package
neuralnet.
neuralnetformula: Menentukan target variabel
(contoh: price) dan prediktor.data: Dataset yang digunakan untuk
membangun model.hidden: Jumlah node yang digunakan di
hidden layer.rep: Jumlah pengulangan model yang
ingin dibuat.Sekarang, kita bandingkan hasil dari neural network tanpa hidden layer dengan model regresi linear yang sudah kita buat:
#>
#> Call:
#> lm(formula = price ~ ., data = df_linear)
#>
#> Coefficients:
#> (Intercept) age distance_to_mrt num_conv_store
#> 45.759308 -0.346455 -0.005375 1.240674
Sekarang, mari kita buat model Neural Network untuk kasus klasifikasi
dengan target variabel price
(high/low).
err.fct: Fungsi perhitungan error.
ce (Cross-Entropy): Digunakan untuk
klasifikasi biner (2 kelas).act.fct: Fungsi aktivasi pada output
layer.
logistic: Mengubah hasil menjadi
probabilitas antara 0 dan 1.linear.output:
FALSE: Untuk kasus klasifikasi (bukan
output berupa angka).Kita cek kembali model regresi logistik yang sudah dibuat sebelumnya:
#>
#> Call: glm(formula = price ~ ., family = "binomial", data = df_kategori)
#>
#> Coefficients:
#> (Intercept) age distance_to_mrt num_conv_store
#> 5.103873 -0.093332 -0.003873 0.004009
#>
#> Degrees of Freedom: 99 Total (i.e. Null); 96 Residual
#> Null Deviance: 138
#> Residual Deviance: 61.09 AIC: 69.09
Kita telah mengetahui tentang neural network. Namun apa hubungannya dengan Deep Learning?
Deep Learning adalah perkembangan dari Neural Network dengan karakteristik utama berupa penambahan hidden layer yang lebih dari satu.
# Deep Learning untuk klasifikasi
model_klasifikasi_deep <- neuralnet(formula = price ~ .,
data = df_kategori,
hidden = c(5, 3),
linear.output = F, # supaya tidak menghasilkan output yang linear
act.fct = "logistic", # fungsi aktivasi untuk mengubah menjadi bentuk probabiliti
err.fct = "ce", # fungsi error, klassifikasi = cross-entropy
rep = 3)
# plot(model_klasifikasi_deep, rep = "best")Untuk melakukan prediksi menggunakan model Neural Network, kita
menggunakan fungsi compute() alih-alih
predict().
covariate) untuk data yang
ingin diprediksi.net.result.# Prediksi menggunakan Deep Learning
pred <- compute(x = model_klasifikasi_deep, covariate = df_kategori)
# Hasil prediksi
pred$net.result#> [,1]
#> [1,] 0.54555326240
#> [2,] 0.54555326234
#> [3,] 0.54555326240
#> [4,] 0.54555325719
#> [5,] 0.54555326240
#> [6,] 0.54555326240
#> [7,] 0.54555326240
#> [8,] 0.54555326240
#> [9,] 0.54555326240
#> [10,] 0.54555326240
#> [11,] 0.54555326240
#> [12,] 0.54555326240
#> [13,] 0.54555325654
#> [14,] 0.54555326240
#> [15,] 0.54555326240
#> [16,] 0.54555326240
#> [17,] 0.54555326240
#> [18,] 0.54555326240
#> [19,] 0.54555326240
#> [20,] 0.54555326240
#> [21,] 0.54555326240
#> [22,] 0.54555326240
#> [23,] 0.54555326240
#> [24,] 0.54555326240
#> [25,] 0.54555326240
#> [26,] 0.54555326240
#> [27,] 0.54555326240
#> [28,] 0.54555326240
#> [29,] 0.54555326240
#> [30,] 0.54510093452
#> [31,] 0.54555326240
#> [32,] 0.54555326240
#> [33,] 0.54555326240
#> [34,] 0.54555326240
#> [35,] 0.54555326240
#> [36,] 0.54555326240
#> [37,] 0.54555326240
#> [38,] 0.54555326240
#> [39,] 0.54555326240
#> [40,] 0.54555326240
#> [41,] 0.54555326240
#> [42,] 0.54555326240
#> [43,] 0.54555326240
#> [44,] 0.54555326240
#> [45,] 0.00004969441
#> [46,] 0.54555326240
#> [47,] 0.54555326240
#> [48,] 0.54555326240
#> [49,] 0.54555326240
#> [50,] 0.54555326240
#> [51,] 0.54555326240
#> [52,] 0.54555326236
#> [53,] 0.54555326240
#> [54,] 0.54555326240
#> [55,] 0.54555326240
#> [56,] 0.54555326240
#> [57,] 0.54555326240
#> [58,] 0.54555326240
#> [59,] 0.54555326240
#> [60,] 0.54555326240
#> [61,] 0.54555326240
#> [62,] 0.54555326240
#> [63,] 0.54555326240
#> [64,] 0.54555255155
#> [65,] 0.54555325641
#> [66,] 0.54555326240
#> [67,] 0.54555326240
#> [68,] 0.54555326240
#> [69,] 0.54555326240
#> [70,] 0.54555326240
#> [71,] 0.54555325749
#> [72,] 0.54555326240
#> [73,] 0.54555326240
#> [74,] 0.54555326240
#> [75,] 0.54555326240
#> [76,] 0.54555326240
#> [77,] 0.54555326240
#> [78,] 0.54555326240
#> [79,] 0.54555326240
#> [80,] 0.54555326240
#> [81,] 0.54555326240
#> [82,] 0.54555326240
#> [83,] 0.54555326240
#> [84,] 0.54555326240
#> [85,] 0.54555326240
#> [86,] 0.54555326240
#> [87,] 0.54555326240
#> [88,] 0.54555326240
#> [89,] 0.54555326240
#> [90,] 0.54498694271
#> [91,] 0.54555326240
#> [92,] 0.54555326240
#> [93,] 0.54555326240
#> [94,] 0.54555325719
#> [95,] 0.54555326240
#> [96,] 0.54555326240
#> [97,] 0.54555326240
#> [98,] 0.54555326240
#> [99,] 0.54555326240
#> [100,] 0.54555326240
Untuk klasifikasi biner, hasil probabilitas perlu dikonversi menjadi
kelas (0 atau 1) menggunakan ambang batas
(misalnya, 0.5):
# Konversi probabilitas menjadi kelas
pred_kelas <- ifelse(pred$net.result > 0.5 , yes = 1, no = 0)
head(pred_kelas)#> [,1]
#> [1,] 1
#> [2,] 1
#> [3,] 1
#> [4,] 1
#> [5,] 1
#> [6,] 1
Neural Network menghasilkan beberapa informasi penting yang dapat digunakan untuk evaluasi model:
$call: Menampilkan kode pembuatan
model.$response: Data target variabel.$covariate: Data prediktor.$net.result: Hasil prediksi
target.$result.matrix: Detail informasi akhir
model (bias, weight, error, dll.).Neural Network bekerja dengan mengurangi kesalahan (error) dari prediksi dan memperbarui bobot (weight) untuk meningkatkan akurasi. Proses ini disebut epoch dan terdiri dari dua fase:
Proses di mana model mencoba memprediksi nilai target y berdasarkan bobot yang ada.
Setelah memprediksi, model menghitung kesalahan dan memperbarui bobot agar prediksi lebih akurat.
Inisialisasi Bobot
Bobot dan bias dimulai dengan nilai acak.
Feed Forward
Data input diproses untuk menghasilkan prediksi (y’).
Menghitung Error
Kesalahan dihitung dengan membandingkan prediksi dan nilai
sebenarnya.
Back Propagation
Error yang dihitung digunakan untuk memperbarui bobot.
Update Bobot
Bobot diperbarui dan proses ini diulang sampai error sekecil
mungkin.
Activation Function: Fungsi yang digunakan untuk memproses output dari setiap node, misalnya sigmoid atau ReLU.
Forward Propagation: Proses di mana data berjalan melewati jaringan untuk menghasilkan prediksi.
Backpropagation: Proses memperbaiki bobot berdasarkan error dari prediksi.
Cost Function: Mengukur seberapa besar kesalahan antara prediksi dan data sebenarnya, misalnya Cross-Entropy untuk klasifikasi.
Epoch: Satu putaran penuh dari proses Feed Forward dan Back Propagation.
Dengan proses ini, Neural Network “belajar” untuk membuat prediksi yang lebih tepat dari waktu ke waktu.
- Layer input : 3 nodes
- Layer hidden : 4 nodes
- Layer output : 1 node
set.seed saat membuat model neural
network?supaya memiliki nilai random yang sama dengan partner kerja yang menjalan kode-nya juga, sehingga nanti menghasilkan nilai output yg sama juga
Yang berubah adalah jumlah nodes pada input layer, menjadi 5 nodes.
- Jika dataset nya terlalu kecil
- Datanya tidak kompleks
- Bagus untuk data yang memiliki pola kompleks
- Bagus untuk data unstructured
bobot bisa dikatakan adalah faktor untuk menentukan penting tidaknya suatu data
Feed Forward adalah proses di mana model memprediksi
nilai target berdasarkan bobot dan bias yang ada. Dalam proses ini,
model menerima input dari setiap prediktor atau fitur, kemudian data ini
diolah sesuai dengan bobot yang ada di setiap neuron/node, ditambah
dengan nilai bias. Perubahan skala data, yang ditandai dengan
S pada hidden layer dan output layer, terjadi karena
penggunaan Activation Function seperti fungsi
Sigmoid.
Activation Function berfungsi untuk mentransformasi input sebelum diteruskan ke layer berikutnya sesuai dengan kebutuhan model. Fungsi ini membantu:
💡 Beberapa jenis Activation Function:
Linear
linear.output = T (default).Sigmoid / Logistic
linear.output = F &
act.fct = "logistic".Softmax
ReLU (Rectified Linear Unit)
Tanh (Hyperbolic Tangent)
act fct pada output layer -> linear
act fct pada output layer -> softmax
Cost function adalah nilai acuan kebaikan model; nilai untuk mengevaluasi kebaikan model; dapat juga dianalogikan sebagai error. Model dapat “belajar” dengan mengetahui cost function yang harus ia gunakan untuk mengevaluasi dirinya sendiri. Cost function yang digunakan berbeda untuk tiap kasus:
regresi:
neuralnet(..., err.fct="sse")\[SSE = \frac{1}{2} {\Sigma (y - \hat y)^2}\]
klasifikasi:
neuralnet(..., err.fct="ce")\[Binary\ Cross-Entropy = -p(x)\ log\ q(x) + (1-p(x))\ log\ (1-q(x))\]
❓ Apabila kita ingin memprediksi tingkat kepuasan suatu pelanggan yang mana ada 3 parameter yaitu: tidak puas, biasa saja, puas; jenis activation function dan loss function apa yang cocok digunakan?
- Activation function –> softmax
- Loss function –> ce
Back Propagation adalah proses mengupdate bobot berdasarkan informasi yang didapatkan dari error hasil prediksi. Informasi yang dicari adalah informasi tentang nilai update yang optimal dengan menggunakan nilai gradient, sehingga metodenya disebut dengan Gradient Descent. Untuk mengatur seberapa cepat dan detail model belajar, nilai Learning Rate dapat diatur. Semakin kecil learning rate, semakin detail model belajar. Nilai yang biasa digunakan untuk Learning Rate adalah 0.01.
\[W_k = W_{k-1} - \alpha \frac{\partial\ E}{\partial\ W_{k-1}} = W_{k-1} - \alpha \nabla g(W_{k-1}) \]
Keterangan:
\(W_k\) : Bobot pada iterasi k
\(W_{k-1}\) : Bobot pada iterasi k-1
\(\alpha\) : Learning rate
\(\frac{\partial\ E}{\partial\ W_{k-1}}\) : Partial derivative/turunan parsial
\(\nabla g(W_{k-1})\) : gradient dari iterasi k-1